package systemcontracts

// GenericStorageABI is the ABI definition for the GenericStorage contract
const GenericStorageABI = `[
    {
        "inputs": [],
        "stateMutability": "nonpayable",
        "type": "constructor"
    },
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "owner",
                "type": "address"
            }
        ],
        "name": "OwnableInvalidOwner",
        "type": "error"
    },
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "account",
                "type": "address"
            }
        ],
        "name": "OwnableUnauthorizedAccount",
        "type": "error"
    },
    {
        "anonymous": false,
        "inputs": [
            {
                "indexed": false,
                "internalType": "uint256",
                "name": "keyCount",
                "type": "uint256"
            }
        ],
        "name": "BatchDataRetrieved",
        "type": "event"
    },
    {
        "anonymous": false,
        "inputs": [
            {
                "indexed": true,
                "internalType": "bytes",
                "name": "key",
                "type": "bytes"
            }
        ],
        "name": "DataDeleted",
        "type": "event"
    },
    {
        "anonymous": false,
        "inputs": [
            {
                "indexed": true,
                "internalType": "bytes",
                "name": "key",
                "type": "bytes"
            }
        ],
        "name": "DataStored",
        "type": "event"
    },
    {
        "anonymous": false,
        "inputs": [
            {
                "indexed": true,
                "internalType": "address",
                "name": "previousOwner",
                "type": "address"
            },
            {
                "indexed": true,
                "internalType": "address",
                "name": "newOwner",
                "type": "address"
            }
        ],
        "name": "OwnershipTransferred",
        "type": "event"
    },
    {
        "anonymous": false,
        "inputs": [],
        "name": "StorageCleared",
        "type": "event"
    },
    {
        "inputs": [
            {
                "internalType": "bytes[]",
                "name": "keyList",
                "type": "bytes[]"
            }
        ],
        "name": "batchGet",
        "outputs": [
            {
                "components": [
                    {
                        "internalType": "bytes",
                        "name": "primaryData",
                        "type": "bytes"
                    },
                    {
                        "internalType": "bytes",
                        "name": "secondaryData",
                        "type": "bytes"
                    },
                    {
                        "internalType": "bytes",
                        "name": "auxiliaryData",
                        "type": "bytes"
                    }
                ],
                "internalType": "struct GenericStorage.GenericValue[]",
                "name": "values",
                "type": "tuple[]"
            },
            {
                "internalType": "bool[]",
                "name": "existsFlags",
                "type": "bool[]"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [],
        "name": "clear",
        "outputs": [],
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "inputs": [],
        "name": "count",
        "outputs": [
            {
                "internalType": "uint256",
                "name": "totalCount",
                "type": "uint256"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "bytes",
                "name": "key",
                "type": "bytes"
            }
        ],
        "name": "exists",
        "outputs": [
            {
                "internalType": "bool",
                "name": "keyExists",
                "type": "bool"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "bytes",
                "name": "key",
                "type": "bytes"
            }
        ],
        "name": "get",
        "outputs": [
            {
                "components": [
                    {
                        "internalType": "bytes",
                        "name": "primaryData",
                        "type": "bytes"
                    },
                    {
                        "internalType": "bytes",
                        "name": "secondaryData",
                        "type": "bytes"
                    },
                    {
                        "internalType": "bytes",
                        "name": "auxiliaryData",
                        "type": "bytes"
                    }
                ],
                "internalType": "struct GenericStorage.GenericValue",
                "name": "value",
                "type": "tuple"
            },
            {
                "internalType": "bool",
                "name": "keyExists",
                "type": "bool"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "uint256",
                "name": "offset",
                "type": "uint256"
            },
            {
                "internalType": "uint256",
                "name": "limit",
                "type": "uint256"
            }
        ],
        "name": "list",
        "outputs": [
            {
                "internalType": "bytes[]",
                "name": "keyList",
                "type": "bytes[]"
            },
            {
                "components": [
                    {
                        "internalType": "bytes",
                        "name": "primaryData",
                        "type": "bytes"
                    },
                    {
                        "internalType": "bytes",
                        "name": "secondaryData",
                        "type": "bytes"
                    },
                    {
                        "internalType": "bytes",
                        "name": "auxiliaryData",
                        "type": "bytes"
                    }
                ],
                "internalType": "struct GenericStorage.GenericValue[]",
                "name": "values",
                "type": "tuple[]"
            },
            {
                "internalType": "uint256",
                "name": "total",
                "type": "uint256"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "uint256",
                "name": "offset",
                "type": "uint256"
            },
            {
                "internalType": "uint256",
                "name": "limit",
                "type": "uint256"
            }
        ],
        "name": "listKeys",
        "outputs": [
            {
                "internalType": "bytes[]",
                "name": "keyList",
                "type": "bytes[]"
            },
            {
                "internalType": "uint256",
                "name": "total",
                "type": "uint256"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [],
        "name": "owner",
        "outputs": [
            {
                "internalType": "address",
                "name": "",
                "type": "address"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "bytes",
                "name": "key",
                "type": "bytes"
            },
            {
                "components": [
                    {
                        "internalType": "bytes",
                        "name": "primaryData",
                        "type": "bytes"
                    },
                    {
                        "internalType": "bytes",
                        "name": "secondaryData",
                        "type": "bytes"
                    },
                    {
                        "internalType": "bytes",
                        "name": "auxiliaryData",
                        "type": "bytes"
                    }
                ],
                "internalType": "struct GenericStorage.GenericValue",
                "name": "value",
                "type": "tuple"
            }
        ],
        "name": "put",
        "outputs": [],
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "bytes",
                "name": "key",
                "type": "bytes"
            }
        ],
        "name": "remove",
        "outputs": [],
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "inputs": [],
        "name": "renounceOwnership",
        "outputs": [],
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "newOwner",
                "type": "address"
            }
        ],
        "name": "transferOwnership",
        "outputs": [],
        "stateMutability": "nonpayable",
        "type": "function"
    }
]`

const GenericStorageByteCodeStr = "60806040523480156200001157600080fd5b5033600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603620000885760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016200007f9190620001a9565b60405180910390fd5b6200009981620000a060201b60201c565b50620001c6565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620001918262000164565b9050919050565b620001a38162000184565b82525050565b6000602082019050620001c0600083018462000198565b92915050565b6129ae80620001d66000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c8063715018a611610071578063715018a61461017c57806379fc09a214610186578063821bef2f146101b65780638da5cb5b146101e7578063d6d7d52514610205578063f2fde38b14610236576100b4565b806306661abd146100b9578063072957b0146100d757806342e1ae2e146100f357806350fd73671461012457806352efea6e1461015657806358edef4c14610160575b600080fd5b6100c1610252565b6040516100ce91906117e7565b60405180910390f35b6100f160048036038101906100ec9190611a1e565b61025f565b005b61010d60048036038101906101089190611b7c565b61046e565b60405161011b929190611e2e565b60405180910390f35b61013e60048036038101906101399190611e91565b6107e1565b60405161014d93929190611f93565b60405180910390f35b61015e610c65565b005b61017a60048036038101906101759190611fd8565b610da3565b005b61018461104e565b005b6101a0600480360381019061019b9190611fd8565b611062565b6040516101ad9190612030565b60405180910390f35b6101d060048036038101906101cb9190611e91565b611074565b6040516101de92919061204b565b60405180910390f35b6101ef611243565b6040516101fc91906120bc565b60405180910390f35b61021f600480360381019061021a9190611fd8565b61126c565b60405161022d929190612135565b60405180910390f35b610250600480360381019061024b9190612191565b61149c565b005b6000600180549050905090565b610267611522565b60008251116102ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102a29061221b565b60405180910390fd5b6102b4826115a9565b61039557600180805490506102c9919061226a565b6003836040516102d991906122da565b90815260200160405180910390208190555060018290806001815401808255809150506001900390600052602060002001600090919091909150908161031f91906124fd565b506002819080600181540180825580915050600190039060005260206000209060030201600090919091909150600082015181600001908161036191906124fd565b50602082015181600101908161037791906124fd565b50604082015181600201908161038d91906124fd565b505050610428565b80600260016003856040516103aa91906122da565b9081526020016040518091039020546103c391906125cf565b815481106103d4576103d3612603565b5b906000526020600020906003020160008201518160000190816103f791906124fd565b50602082015181600101908161040d91906124fd565b50604082015181600201908161042391906124fd565b509050505b8160405161043691906122da565b60405180910390207f281be1a469724e78f8c4152bcc9fb70a95646c3e1e2ade9293d8d497c976338a60405160405180910390a25050565b606080825167ffffffffffffffff81111561048c5761048b611831565b5b6040519080825280602002602001820160405280156104c557816020015b6104b26116a0565b8152602001906001900390816104aa5790505b509150825167ffffffffffffffff8111156104e3576104e2611831565b5b6040519080825280602002602001820160405280156105115781602001602082028036833780820191505090505b50905060005b83518110156107db5761054384828151811061053657610535612603565b5b60200260200101516115a9565b82828151811061055657610555612603565b5b60200260200101901515908115158152505081818151811061057b5761057a612603565b5b6020026020010151156107ce576002600160038684815181106105a1576105a0612603565b5b60200260200101516040516105b691906122da565b9081526020016040518091039020546105cf91906125cf565b815481106105e0576105df612603565b5b906000526020600020906003020160405180606001604052908160008201805461060990612320565b80601f016020809104026020016040519081016040528092919081815260200182805461063590612320565b80156106825780601f1061065757610100808354040283529160200191610682565b820191906000526020600020905b81548152906001019060200180831161066557829003601f168201915b5050505050815260200160018201805461069b90612320565b80601f01602080910402602001604051908101604052809291908181526020018280546106c790612320565b80156107145780601f106106e957610100808354040283529160200191610714565b820191906000526020600020905b8154815290600101906020018083116106f757829003601f168201915b5050505050815260200160028201805461072d90612320565b80601f016020809104026020016040519081016040528092919081815260200182805461075990612320565b80156107a65780601f1061077b576101008083540402835291602001916107a6565b820191906000526020600020905b81548152906001019060200180831161078957829003601f168201915b5050505050815250508382815181106107c2576107c1612603565b5b60200260200101819052505b8080600101915050610517565b50915091565b606080600060018054905090508085106108a257600067ffffffffffffffff8111156108105761080f611831565b5b60405190808252806020026020018201604052801561084357816020015b606081526020019060019003908161082e5790505b509250600067ffffffffffffffff81111561086157610860611831565b5b60405190808252806020026020018201604052801561089a57816020015b6108876116a0565b81526020019060019003908161087f5790505b509150610c5e565b600085826108b091906125cf565b905060008186116108c157856108c3565b815b90508067ffffffffffffffff8111156108df576108de611831565b5b60405190808252806020026020018201604052801561091257816020015b60608152602001906001900390816108fd5790505b5094508067ffffffffffffffff81111561092f5761092e611831565b5b60405190808252806020026020018201604052801561096857816020015b6109556116a0565b81526020019060019003908161094d5790505b50935060005b81811015610c5a5760008189610984919061226a565b90506001818154811061099a57610999612603565b5b9060005260206000200180546109af90612320565b80601f01602080910402602001604051908101604052809291908181526020018280546109db90612320565b8015610a285780601f106109fd57610100808354040283529160200191610a28565b820191906000526020600020905b815481529060010190602001808311610a0b57829003601f168201915b5050505050878381518110610a4057610a3f612603565b5b602002602001018190525060028181548110610a5f57610a5e612603565b5b9060005260206000209060030201604051806060016040529081600082018054610a8890612320565b80601f0160208091040260200160405190810160405280929190818152602001828054610ab490612320565b8015610b015780601f10610ad657610100808354040283529160200191610b01565b820191906000526020600020905b815481529060010190602001808311610ae457829003601f168201915b50505050508152602001600182018054610b1a90612320565b80601f0160208091040260200160405190810160405280929190818152602001828054610b4690612320565b8015610b935780601f10610b6857610100808354040283529160200191610b93565b820191906000526020600020905b815481529060010190602001808311610b7657829003601f168201915b50505050508152602001600282018054610bac90612320565b80601f0160208091040260200160405190810160405280929190818152602001828054610bd890612320565b8015610c255780601f10610bfa57610100808354040283529160200191610c25565b820191906000526020600020905b815481529060010190602001808311610c0857829003601f168201915b505050505081525050868381518110610c4157610c40612603565b5b602002602001018190525050808060010191505061096e565b5050505b9250925092565b610c6d611522565b60005b600180549050811015610d5857600060018281548110610c9357610c92612603565b5b906000526020600020018054610ca890612320565b80601f0160208091040260200160405190810160405280929190818152602001828054610cd490612320565b8015610d215780601f10610cf657610100808354040283529160200191610d21565b820191906000526020600020905b815481529060010190602001808311610d0457829003601f168201915b50505050509050600381604051610d3891906122da565b908152602001604051809103902060009055508080600101915050610c70565b5060016000610d6791906116c1565b60026000610d7591906116e2565b7f6c7e419df39ff46e811e7d979ebfd916b8d4960de06f479dc69cf8417cdb89e760405160405180910390a1565b610dab611522565b610db4816115a9565b610df3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dea9061267e565b60405180910390fd5b60006001600383604051610e0791906122da565b908152602001604051809103902054610e2091906125cf565b9050600060018080549050610e3591906125cf565b9050808214610f5a5760018181548110610e5257610e51612603565b5b9060005260206000200160018381548110610e7057610e6f612603565b5b906000526020600020019081610e8691906126c9565b5060028181548110610e9b57610e9a612603565b5b906000526020600020906003020160028381548110610ebd57610ebc612603565b5b906000526020600020906003020160008201816000019081610edf91906127c7565b5060018201816001019081610ef491906127c7565b5060028201816002019081610f0991906127c7565b50905050600182610f1a919061226a565b600360018381548110610f3057610f2f612603565b5b90600052602060002001604051610f479190612932565b9081526020016040518091039020819055505b6001805480610f6c57610f6b612949565b5b600190038181906000526020600020016000610f889190611706565b90556002805480610f9c57610f9b612949565b5b600190038181906000526020600020906003020160008082016000610fc19190611706565b600182016000610fd19190611706565b600282016000610fe19190611706565b50509055600383604051610ff591906122da565b9081526020016040518091039020600090558260405161101591906122da565b60405180910390207f9248955bf73fd007be0a0d9dc13c36f9e61c3642fbac04d8ac592e0c21d0103760405160405180910390a2505050565b611056611522565b61106060006115d4565b565b600061106d826115a9565b9050919050565b6060600060018054905090508084106110dd57600067ffffffffffffffff8111156110a2576110a1611831565b5b6040519080825280602002602001820160405280156110d557816020015b60608152602001906001900390816110c05790505b50915061123c565b600084826110eb91906125cf565b905060008185116110fc57846110fe565b815b90508067ffffffffffffffff81111561111a57611119611831565b5b60405190808252806020026020018201604052801561114d57816020015b60608152602001906001900390816111385790505b50935060005b818110156112385760018188611169919061226a565b8154811061117a57611179612603565b5b90600052602060002001805461118f90612320565b80601f01602080910402602001604051908101604052809291908181526020018280546111bb90612320565b80156112085780601f106111dd57610100808354040283529160200191611208565b820191906000526020600020905b8154815290600101906020018083116111eb57829003601f168201915b50505050508582815181106112205761121f612603565b5b60200260200101819052508080600101915050611153565b5050505b9250929050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6112746116a0565b600061127f836115a9565b90508015611497576002600160038560405161129b91906122da565b9081526020016040518091039020546112b491906125cf565b815481106112c5576112c4612603565b5b90600052602060002090600302016040518060600160405290816000820180546112ee90612320565b80601f016020809104026020016040519081016040528092919081815260200182805461131a90612320565b80156113675780601f1061133c57610100808354040283529160200191611367565b820191906000526020600020905b81548152906001019060200180831161134a57829003601f168201915b5050505050815260200160018201805461138090612320565b80601f01602080910402602001604051908101604052809291908181526020018280546113ac90612320565b80156113f95780601f106113ce576101008083540402835291602001916113f9565b820191906000526020600020905b8154815290600101906020018083116113dc57829003601f168201915b5050505050815260200160028201805461141290612320565b80601f016020809104026020016040519081016040528092919081815260200182805461143e90612320565b801561148b5780601f106114605761010080835404028352916020019161148b565b820191906000526020600020905b81548152906001019060200180831161146e57829003601f168201915b50505050508152505091505b915091565b6114a4611522565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036115165760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161150d91906120bc565b60405180910390fd5b61151f816115d4565b50565b61152a611698565b73ffffffffffffffffffffffffffffffffffffffff16611548611243565b73ffffffffffffffffffffffffffffffffffffffff16146115a75761156b611698565b6040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161159e91906120bc565b60405180910390fd5b565b6000806003836040516115bc91906122da565b90815260200160405180910390205414159050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600033905090565b60405180606001604052806060815260200160608152602001606081525090565b50805460008255906000526020600020908101906116df9190611746565b50565b5080546000825560030290600052602060002090810190611703919061176a565b50565b50805461171290612320565b6000825580601f106117245750611743565b601f01602090049060005260206000209081019061174291906117b1565b5b50565b5b80821115611766576000818161175d9190611706565b50600101611747565b5090565b5b808211156117ad57600080820160006117849190611706565b6001820160006117949190611706565b6002820160006117a49190611706565b5060030161176b565b5090565b5b808211156117ca5760008160009055506001016117b2565b5090565b6000819050919050565b6117e1816117ce565b82525050565b60006020820190506117fc60008301846117d8565b92915050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61186982611820565b810181811067ffffffffffffffff8211171561188857611887611831565b5b80604052505050565b600061189b611802565b90506118a78282611860565b919050565b600067ffffffffffffffff8211156118c7576118c6611831565b5b6118d082611820565b9050602081019050919050565b82818337600083830152505050565b60006118ff6118fa846118ac565b611891565b90508281526020810184848401111561191b5761191a61181b565b5b6119268482856118dd565b509392505050565b600082601f83011261194357611942611816565b5b81356119538482602086016118ec565b91505092915050565b600080fd5b600080fd5b60006060828403121561197c5761197b61195c565b5b6119866060611891565b9050600082013567ffffffffffffffff8111156119a6576119a5611961565b5b6119b28482850161192e565b600083015250602082013567ffffffffffffffff8111156119d6576119d5611961565b5b6119e28482850161192e565b602083015250604082013567ffffffffffffffff811115611a0657611a05611961565b5b611a128482850161192e565b60408301525092915050565b60008060408385031215611a3557611a3461180c565b5b600083013567ffffffffffffffff811115611a5357611a52611811565b5b611a5f8582860161192e565b925050602083013567ffffffffffffffff811115611a8057611a7f611811565b5b611a8c85828601611966565b9150509250929050565b600067ffffffffffffffff821115611ab157611ab0611831565b5b602082029050602081019050919050565b600080fd5b6000611ada611ad584611a96565b611891565b90508083825260208201905060208402830185811115611afd57611afc611ac2565b5b835b81811015611b4457803567ffffffffffffffff811115611b2257611b21611816565b5b808601611b2f898261192e565b85526020850194505050602081019050611aff565b5050509392505050565b600082601f830112611b6357611b62611816565b5b8135611b73848260208601611ac7565b91505092915050565b600060208284031215611b9257611b9161180c565b5b600082013567ffffffffffffffff811115611bb057611baf611811565b5b611bbc84828501611b4e565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611c2b578082015181840152602081019050611c10565b60008484015250505050565b6000611c4282611bf1565b611c4c8185611bfc565b9350611c5c818560208601611c0d565b611c6581611820565b840191505092915050565b60006060830160008301518482036000860152611c8d8282611c37565b91505060208301518482036020860152611ca78282611c37565b91505060408301518482036040860152611cc18282611c37565b9150508091505092915050565b6000611cda8383611c70565b905092915050565b6000602082019050919050565b6000611cfa82611bc5565b611d048185611bd0565b935083602082028501611d1685611be1565b8060005b85811015611d525784840389528151611d338582611cce565b9450611d3e83611ce2565b925060208a01995050600181019050611d1a565b50829750879550505050505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b60008115159050919050565b611da581611d90565b82525050565b6000611db78383611d9c565b60208301905092915050565b6000602082019050919050565b6000611ddb82611d64565b611de58185611d6f565b9350611df083611d80565b8060005b83811015611e21578151611e088882611dab565b9750611e1383611dc3565b925050600181019050611df4565b5085935050505092915050565b60006040820190508181036000830152611e488185611cef565b90508181036020830152611e5c8184611dd0565b90509392505050565b611e6e816117ce565b8114611e7957600080fd5b50565b600081359050611e8b81611e65565b92915050565b60008060408385031215611ea857611ea761180c565b5b6000611eb685828601611e7c565b9250506020611ec785828601611e7c565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6000611f098383611c37565b905092915050565b6000602082019050919050565b6000611f2982611ed1565b611f338185611edc565b935083602082028501611f4585611eed565b8060005b85811015611f815784840389528151611f628582611efd565b9450611f6d83611f11565b925060208a01995050600181019050611f49565b50829750879550505050505092915050565b60006060820190508181036000830152611fad8186611f1e565b90508181036020830152611fc18185611cef565b9050611fd060408301846117d8565b949350505050565b600060208284031215611fee57611fed61180c565b5b600082013567ffffffffffffffff81111561200c5761200b611811565b5b6120188482850161192e565b91505092915050565b61202a81611d90565b82525050565b60006020820190506120456000830184612021565b92915050565b600060408201905081810360008301526120658185611f1e565b905061207460208301846117d8565b9392505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006120a68261207b565b9050919050565b6120b68161209b565b82525050565b60006020820190506120d160008301846120ad565b92915050565b600060608301600083015184820360008601526120f48282611c37565b9150506020830151848203602086015261210e8282611c37565b915050604083015184820360408601526121288282611c37565b9150508091505092915050565b6000604082019050818103600083015261214f81856120d7565b905061215e6020830184612021565b9392505050565b61216e8161209b565b811461217957600080fd5b50565b60008135905061218b81612165565b92915050565b6000602082840312156121a7576121a661180c565b5b60006121b58482850161217c565b91505092915050565b600082825260208201905092915050565b7f4b65792063616e6e6f7420626520656d70747900000000000000000000000000600082015250565b60006122056013836121be565b9150612210826121cf565b602082019050919050565b60006020820190508181036000830152612234816121f8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612275826117ce565b9150612280836117ce565b92508282019050808211156122985761229761223b565b5b92915050565b600081905092915050565b60006122b482611bf1565b6122be818561229e565b93506122ce818560208601611c0d565b80840191505092915050565b60006122e682846122a9565b915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061233857607f821691505b60208210810361234b5761234a6122f1565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026123b37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612376565b6123bd8683612376565b95508019841693508086168417925050509392505050565b6000819050919050565b60006123fa6123f56123f0846117ce565b6123d5565b6117ce565b9050919050565b6000819050919050565b612414836123df565b61242861242082612401565b848454612383565b825550505050565b600090565b61243d612430565b61244881848461240b565b505050565b5b8181101561246c57612461600082612435565b60018101905061244e565b5050565b601f8211156124b15761248281612351565b61248b84612366565b8101602085101561249a578190505b6124ae6124a685612366565b83018261244d565b50505b505050565b600082821c905092915050565b60006124d4600019846008026124b6565b1980831691505092915050565b60006124ed83836124c3565b9150826002028217905092915050565b61250682611bf1565b67ffffffffffffffff81111561251f5761251e611831565b5b6125298254612320565b612534828285612470565b600060209050601f8311600181146125675760008415612555578287015190505b61255f85826124e1565b8655506125c7565b601f19841661257586612351565b60005b8281101561259d57848901518255600182019150602085019450602081019050612578565b868310156125ba57848901516125b6601f8916826124c3565b8355505b6001600288020188555050505b505050505050565b60006125da826117ce565b91506125e5836117ce565b92508282039050818111156125fd576125fc61223b565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4b657920646f6573206e6f742065786973740000000000000000000000000000600082015250565b60006126686012836121be565b915061267382612632565b602082019050919050565b600060208201905081810360008301526126978161265b565b9050919050565b6000815490506126ad81612320565b9050919050565b60008190508160005260206000209050919050565b8181036126d75750506127af565b6126e08261269e565b67ffffffffffffffff8111156126f9576126f8611831565b5b6127038254612320565b61270e828285612470565b6000601f83116001811461273d576000841561272b578287015490505b61273585826124e1565b8655506127a8565b601f19841661274b876126b4565b965061275686612351565b60005b8281101561277e57848901548255600182019150600185019450602081019050612759565b8683101561279b5784890154612797601f8916826124c3565b8355505b6001600288020188555050505b5050505050505b565b6000815490506127c081612320565b9050919050565b8181036127d55750506128ad565b6127de826127b1565b67ffffffffffffffff8111156127f7576127f6611831565b5b6128018254612320565b61280c828285612470565b6000601f83116001811461283b5760008415612829578287015490505b61283385826124e1565b8655506128a6565b601f19841661284987612351565b965061285486612351565b60005b8281101561287c57848901548255600182019150600185019450602081019050612857565b868310156128995784890154612895601f8916826124c3565b8355505b6001600288020188555050505b5050505050505b565b600081546128bc81612320565b6128c6818661229e565b945060018216600081146128e157600181146128f657612929565b60ff1983168652811515820286019350612929565b6128ff85612351565b60005b8381101561292157815481890152600182019150602081019050612902565b838801955050505b50505092915050565b600061293e82846128af565b915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220742757bbdebb67507bfe37b3bab5f5e531aad9896e9022a68c6faf2c49545c3564736f6c63430008180033"
